package com.example.orderminiappapi.service;


import com.example.orderminiappapi.bean.Order;
import com.example.orderminiappapi.bean.OrderItem;
import com.example.orderminiappapi.bean.SearchCondition;
import com.example.orderminiappapi.bean.Shop;

import java.util.List;

public interface OrderService {
    int addOrder(Order order);

    int addOrderItem(OrderItem orderItem);

    int changeOrderAllPay(Order order);             // 改变订单的总价值

    int deleteOrderItemByOrderId(Order order);

    int perfectOrder(Order order);

    Order getOrderByOrderId(Order order);           // 通过订单号获取订单内容

    List<OrderItem> getOrderItemByOrderId(Order order);   // 通过订单号获取该订单的菜品

    Order getUnPerfectedOrder(Order order);         // 判断有无15分钟以内的订单

    int deleteUnPerfectedOrder(Order order);        // 如果该订单超过15秒，将其删除

    int deleteUnPerfectedOrderItem(Order order);    // 如果该订单超过15秒，将其菜单也删除

    List<Order> getAllOrder(Order order);           // 查询该用户所有的订单

    Order getOneOrder(Order order);                 //  根据orderId获取order

    int doRate(Order order);                        //  根据orderId打分

    int doEvaluate(Order order);                    //  根据orderId写评价

    /**
     * 后台管理接口
     * */
    List<Order> shopOwnerSearchOrder(SearchCondition searchCondition);      // 订单列表带分页

    int shopOwnerSearchOrderCount(SearchCondition searchCondition);      // 订单列表带分页获取其total

    List<Order> getUnAcceptedOrder(Order order);    //   商家通过shopId获取未接受的订单

    List<Order> getUnCompletedOrder(Order order);   //   商家通过shopId获取未完成的订单

    int getAllShopUnAcceptedOrder(Shop shop);       //   获取所有商店未接单的订单总数

    int acceptOrder(Order order);                   //   商家接受订单

    int cancelOrder(Order order);                   //   商家取消订单

    int completeOrder(Order order);                 //   商家完成订单

    int getOrderTrend(Order order);                 //   获取每月的订单总数

    float getSaleTrend(Order order);                //   获取每月的订单销售额

    int getAllOrderTrend(Order order, Shop shop);   //   获取所有店铺该月的订单总数

    float getAllSaleTrend(Order order, Shop shop);  //   获取所有店铺该月的销售额

    /**
     * 管理员接口
     * */
    List<Order> managerSearchOrder(SearchCondition searchCondition);        // 管理员获取订单

    int managerSearchOrderCount(SearchCondition searchCondition);           // 管理员获取订单总数
}
